// 直接在前端调用快递100 API的物流页面
// 只引入md5库，不使用crypto
const md5 = require('../../utils/md5.min.js');

Page({
  data: {
    // 快递100配置信息（实际使用时请替换为您的正式配置）
    kuaidi100Config: {
      customer: '', // 请替换为从快递100获取的授权码
      key: ''           // 请替换为从快递100获取的接口密钥
    },
    expressInfo: null,       // 快递信息
    loading: true,           // 加载状态
    error: null,             // 错误信息
    mapUrl: '',              // 地图URL
    showMap: false,          // 是否有地图可显示
    showingMap: false,       // 是否正在显示地图
    formattedAddress: '',    // 格式化后的地址
  },
  
  // 物流公司映射表 - 将快递100的编码映射为更友好的名称
  expressCompanies: {
    'shunfeng': '顺丰速运',
    'yuantong': '圆通速递',
    'shentong': '申通快递',
    'yunda': '韵达快递',
    'zhongtong': '中通快递',
    'huitongkuaidi': '百世快递',
    'tiantian': '天天快递',
    'ems': 'EMS快递',
    'jd': '京东物流',
    'zto': '中通快递',
    'debangwuliu': '德邦快递',
    'youshuwuliu': '优速快递'
    // 更多可以根据需要添加
  },

  onLoad: function(options) {
    // 获取传入的参数
    const { 
      expressCompany, 
      expressNumber, 
      phone, 
      from, 
      to,
      orderId,
      address
    } = options;
    
    // 处理收货地址，避免乱码
    let formattedAddress = address || '--';
    try {
      if (address) {
        // 尝试解码可能的URL编码
        formattedAddress = decodeURIComponent(address);
      }
    } catch (e) {
      console.error('地址解码失败:', e);
    }
    
    this.setData({
      orderId: orderId || '--',
      address: address || '--',
      formattedAddress: formattedAddress
    });
    
    // 如果不是测试，直接查询物流
    if (expressCompany && expressNumber) {
      this.queryLogistics({
        com: expressCompany,
        num: expressNumber,
        phone: phone || '',
        from: from || '',
        to: to || ''
      });
    } else {
      // 显示未配置API的提示
      this.setData({
        loading: false,
        error: '请先配置快递100 API信息并输入有效的快递单号'
      });
    }

    // 设置导航栏标题
    wx.setNavigationBarTitle({
      title: '物流跟踪'
    });
  },
  
  // 直接调用快递100 API查询物流
  queryLogistics: function(queryParams) {
    const that = this;
    const { kuaidi100Config } = this.data;
    
    // 检查API配置
    if (kuaidi100Config.customer === '您的快递100授权码' || 
        kuaidi100Config.key === '您的接口密钥') {
      this.setData({
        loading: false,
        error: '请先在pages/direct-logistics/direct-logistics.js文件中配置您的快递100 API信息'
      });
      return;
    }
    
    // 构建请求参数
    const param = {
      com: queryParams.com,       // 物流公司编码
      num: queryParams.num,       // 快递单号
      phone: queryParams.phone,   // 手机号码(顺丰必填)
      from: queryParams.from,     // 出发地
      to: queryParams.to,         // 目的地
      resultv2: '5',              // 开通行政解析等高级功能
      show: '0',                  // 返回json格式
      order: 'desc'               // 降序排列
    };
    
    const paramString = JSON.stringify(param);
    
    try {
      // 生成签名: param + key + customer MD5加密后转大写
      const sign = md5(paramString + kuaidi100Config.key + kuaidi100Config.customer).toUpperCase();
      
      console.log('请求快递100 API', {
        customer: kuaidi100Config.customer,
        sign: sign,
        param: paramString
      });
      
      // 请求快递100 API
      wx.request({
        url: 'https://poll.kuaidi100.com/poll/maptrack.do',
        method: 'POST',
        header: {
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        data: `customer=${kuaidi100Config.customer}&sign=${sign}&param=${encodeURIComponent(paramString)}`,
        success(res) {
          console.log('快递100 API 响应:', res.data);
          
          if (res.data.status === '200' || res.data.message === 'ok') {
            // 查询成功
            // 确保只有在trailUrl存在时才设置showMap为true和mapUrl
            const hasValidTrailUrl = res.data.trailUrl && res.data.trailUrl.trim().length > 0;
            
            // 处理数据，格式化内容
            let expressData = res.data;
            
            // 如果有公司编码，尝试转换为友好名称
            if (expressData.com && that.expressCompanies[expressData.com]) {
              expressData.comText = that.expressCompanies[expressData.com];
            } else {
              expressData.comText = expressData.com;
            }
            
            that.setData({
              expressInfo: expressData,
              loading: false,
              error: null,
              mapUrl: hasValidTrailUrl ? res.data.trailUrl : '',
              showMap: hasValidTrailUrl,
              showingMap: false // 默认不显示地图，用户点击按钮时才显示
            });
            
            // 设置导航栏标题为物流公司名称
            wx.setNavigationBarTitle({
              title: `${expressData.comText || '物流'}跟踪`
            });
            
          } else {
            // 查询失败
            that.setData({
              loading: false,
              error: res.data.message || '查询物流信息失败',
              expressInfo: null
            });
          }
        },
        fail(err) {
          console.error('请求失败:', err);
          that.setData({
            loading: false,
            error: '网络请求失败，请检查网络连接',
            expressInfo: null
          });
        }
      });
    } catch (error) {
      console.error('生成签名失败:', error);
      that.setData({
        loading: false,
        error: '生成签名失败，请检查MD5库是否正确加载',
        expressInfo: null
      });
    }
  },
  
  // 切换地图显示状态
  toggleMapView: function() {
    this.setData({
      showingMap: !this.data.showingMap
    });
    
    console.log('地图显示状态:', this.data.showingMap ? '显示' : '隐藏');
  },
  
  // 复制单号
  copyTrackingNumber: function() {
    if (this.data.expressInfo && this.data.expressInfo.nu) {
      wx.setClipboardData({
        data: this.data.expressInfo.nu,
        success: function() {
          wx.showToast({
            title: '单号已复制',
            icon: 'success'
          });
        }
      });
    }
  },
  
  // 分享功能
  onShareAppMessage: function() {
    const expressInfo = this.data.expressInfo;
    if (expressInfo) {
      return {
        title: `${expressInfo.comText || '快递'}物流跟踪 - ${expressInfo.nu}`,
        path: `/pages/direct-logistics/direct-logistics?expressCompany=${expressInfo.com}&expressNumber=${expressInfo.nu}`
      };
    }
    return {
      title: '物流跟踪',
      path: '/pages/direct-logistics/direct-logistics'
    };
  }
}) 